# Leading rail parameter
class GuideMainPosition:
    def __init__(self, front_back, right_left, up_down, card_id, timer_right_left, timer_front_back, video, kino,
                 curtain, amo):
        self.front_back = front_back
        self.right_left = right_left
        self.up_down = up_down
        self.card_id = card_id
        self.timer_right_left = timer_right_left
        self.timer_front_back = timer_front_back
        self.video = video
        self.kino = kino
        self.curtain = curtain
        self.amo = amo


# Lighting parameter
class GuideLightPosition:
    def __init__(self, left_front_back, left_right_left, right_front_back, right_right_left,left_rotation,
                 right_rotation):
        self.left_front_back = left_front_back
        self.left_right_left = left_right_left
        self.right_front_back = right_front_back
        self.right_right_left = right_right_left
        self.left_rotation = left_rotation
        self.right_rotation = right_rotation


# Robot arm mobile phone warehouse location
class GuideMechanicalArmPositionIphone:
    def __init__(self, x, y, z, rx, ry, rz):
        self.x = x
        self.y = y
        self.z = z
        self.rx = rx
        self.ry = ry
        self.rz = rz


# Robotic arm in position
class GuideMechanicalArmPositionAlignment:
    def __init__(self, base, shoulder, elbow, wrist1, wrist2, wrist3):
        self.base = base
        self.shoulder = shoulder
        self.elbow = elbow
        self.wrist1 = wrist1
        self.wrist2 = wrist2
        self.wrist3 = wrist3


# Clamping position of mechanical arm
class GuideMechanicalArmPositionClamp:
    def __init__(self, base, shoulder, elbow, wrist1, wrist2, wrist3):
        self.base = base
        self.shoulder = shoulder
        self.elbow = elbow
        self.wrist1 = wrist1
        self.wrist2 = wrist2
        self.wrist3 = wrist3


# Guide rail position for each test item
AF_HDR_Blur_Timing = GuideMainPosition(front_back=500, right_left=0, up_down=100, card_id=0, timer_right_left=False,
                                       timer_front_back=True, video=False, kino=True, curtain=True, amo=True)
Head_HDR = GuideMainPosition(front_back=900, right_left=0, up_down=0, card_id=1, timer_right_left=False,
                             timer_front_back=False, video=False, kino=False, curtain=False, amo=False)
ColorChecker = GuideMainPosition(front_back=400, right_left=0, up_down=0, card_id=4, timer_right_left=False,
                                 timer_front_back=False, video=False, kino=False, curtain=False, amo=False)
DXOMARKChart_Photo = GuideMainPosition(front_back=700, right_left=0, up_down=100, card_id=3, timer_right_left=False,
                                 timer_front_back=False, video=False, kino=False, curtain=False, amo=False)
DXOMARKChart_Wide_Photo = GuideMainPosition(front_back=900, right_left=0, up_down=0, card_id=3, timer_right_left=False,
                                 timer_front_back=False, video=False, kino=False, curtain=False, amo=False)
DXOMARKChart_Video = GuideMainPosition(front_back=900, right_left=0, up_down=100, card_id=3, timer_right_left=False,
                                 timer_front_back=False, video=False, kino=False, curtain=False, amo=False)
DXOMARKChart_Wide_Video = GuideMainPosition(front_back=900, right_left=0, up_down=100, card_id=3, timer_right_left=False,
                                 timer_front_back=False, video=False, kino=False, curtain=False, amo=False)
DotCart = GuideMainPosition(front_back=900, right_left=0, up_down=0, card_id=10, timer_right_left=False,
                            timer_front_back=False, video=False, kino=False, curtain=False, amo=False)
DotWideCart = GuideMainPosition(front_back=200, right_left=0, up_down=0, card_id=10, timer_right_left=False,
                            timer_front_back=False, video=False, kino=False, curtain=False, amo=False)
GreyChart = GuideMainPosition(front_back=100, right_left=0, up_down=0, card_id=9, timer_right_left=False,
                              timer_front_back=False, video=False, kino=False, curtain=False, amo=False)
MTFCart = GuideMainPosition(front_back=900, right_left=0, up_down=0, card_id=8, timer_right_left=False,
                            timer_front_back=False, video=False, kino=False, curtain=False, amo=False)
Timing = GuideMainPosition(front_back=900, right_left=0, up_down=0, card_id=0, timer_right_left=False,
                           timer_front_back=False, video=False, kino=True, curtain=True, amo=False)
Timing_Photo = GuideMainPosition(front_back=700, right_left=0, up_down=0, card_id=0, timer_right_left=False,
                                 timer_front_back=False, video=False, kino=True, curtain=True, amo=False)
DeadLeaves = GuideMainPosition(front_back=900, right_left=0, up_down=0, card_id=0, timer_right_left=False,
                               timer_front_back=False, video=False, kino=True, curtain=False, amo=False)
DeadLeaves_video = GuideMainPosition(front_back=900, right_left=0, up_down=0, card_id=0, timer_right_left=False,
                               timer_front_back=False, video=False, kino=True, curtain=False, amo=False)
PhotoVisualNoise = GuideMainPosition(front_back=900, right_left=0, up_down=0, card_id=6, timer_right_left=False,
                                     timer_front_back=False, video=False, kino=False, curtain=False, amo=False)
VideoVisualNoise = GuideMainPosition(front_back=1200, right_left=0, up_down=0, card_id=6, timer_right_left=False,
                                     timer_front_back=False, video=False, kino=False, curtain=False, amo=False)
PortraitHDR = GuideMainPosition(front_back=900, right_left=0, up_down=0, card_id=1, timer_right_left=False,
                                timer_front_back=False, video=False, kino=False, curtain=False, amo=False)

# Light axis default position
Guide_Light_Video = GuideLightPosition(530, 500, 530, 500, 0, 0)
Guide_Light_Photo = GuideLightPosition(980, 625, 980, 625, 0, 0)
# aim at the position
Alignment_Position = GuideMechanicalArmPositionAlignment(63.2277717590332, -73.42179870605469, 116.67835998535156,
                                                         -133.4412841796875, -89.49851989746094, -207.8751220703125)

Alignment_Position_on = GuideMechanicalArmPositionAlignment(58.18896484375, -85.29942321777344, 92.61829376220703,
                                                         -97.95460510253906, -91.91498565673828, -212.4373779296875)
Height_Position = GuideMechanicalArmPositionAlignment(-68.76264953613281, -107.69208526611328, 96.29883575439453,
                                                       -78.44985961914062, -89.9543685913086, -250.5451202392578)
# Mobile phone compartment above the location
Clamp_position_one = GuideMechanicalArmPositionClamp(-47.66420364379883, -88.24430847167969, 81.76655578613281,
                                                     -83.7724380493164, -88.88134765625, -228.23728942871094)
Clamp_position_two = GuideMechanicalArmPositionClamp(-53.41307067871094, -93.81495666503906, 103.37158203125,
                                                     -98.71772766113281, -88.618408203125, -234.31179809570312)
Clamp_position_three = GuideMechanicalArmPositionClamp(-59.371376037597656, -101.0743637084961, 101.1069107055664, 
                                                       -89.84478759765625, -89.91319274902344, -241.10208129882812)
Clamp_position_four = GuideMechanicalArmPositionClamp(-67.39478302001953, -106.76170349121094, 105.05776977539062,
                                                       -87.79969024658203, -89.80743408203125, -248.2154083251953)
Clamp_position_five = GuideMechanicalArmPositionClamp(-77.54548645019531, -112.26246643066406, 107.5063705444336,
                                                       -85.86854553222656, -88.7021484375, -258.93402099609375)
Clamp_position_six = GuideMechanicalArmPositionClamp(-88.6241455078125, -115.23922729492188, 103.83893585205078, 
                                                     -78.6147689819336, -88.5270767211914, -270.02978515625)

# Mobile phone warehouse location


Iphone_position_one = GuideMechanicalArmPositionIphone(-0.4182206988334656, 0.29348674416542053, 0.07324377447366714,
                                                       2.244586706161499, -2.1975648403167725, -0.033360205590724945)
Iphone_position_two = GuideMechanicalArmPositionIphone(-0.35989558696746826, 0.2939825654029846, 0.07562850415706635,
                                                       -2.226541757583618, 2.2127161026000977, -0.011260705068707466)
Iphone_position_three = GuideMechanicalArmPositionIphone(-0.3007108271121979, 0.29318293929100037, 0.07608979195356369,
                                                         -2.2511894702911377, 2.187828779220581, -0.004170011729001999)
Iphone_position_four = GuideMechanicalArmPositionIphone(-0.2409735471010208, 0.2938691973686218, 0.07578183710575104,
                                                        2.234029531478882, -2.206249952316284, 0.01139933429658413)
Iphone_position_five = GuideMechanicalArmPositionIphone(-0.1787114292383194, 0.294260710477829, 0.07492436468601227,
                                                        2.239619016647339, -2.190629005432129, -0.03186970576643944)
Iphone_position_six = GuideMechanicalArmPositionIphone(-0.11843385547399521, 0.2957005798816681, 0.0756104588508606,
                                                       2.2352957725524902, -2.1868016719818115, -0.025441337376832962)
